// UI处理模块

import { log } from './logger.js';

/**
 * 初始化UI处理模块
 */
export function initUIHandlers() {
    setupCapabilityHandlers();
    setupQuickActionHandlers();
    setupClientCapabilityCheckboxes();
    setupAuthHandlers();
}

/**
 * 设置认证相关的UI处理
 */
export function setupAuthHandlers() {
    try {
        // 检查window.appDOM是否存在
        if (!window || !window.appDOM) {
            log('window.appDOM对象不存在，跳过认证处理设置', 'info');
            return;
        }
        
        // 检查认证相关DOM元素是否存在，避免在Electron环境下报错
        if (!window.appDOM.authCheckbox || !window.appDOM.authTypeSelect) {
            log('认证相关UI元素不存在，跳过认证处理设置', 'info');
            return;
        }
        
        // 认证复选框事件处理
        window.appDOM.authCheckbox.addEventListener('change', (e) => {
            if (e && e.target) {
                updateAuthDetailsVisibility(e.target.checked);
                
                if (window.appState.connected) {
                    log(`认证支持已${e.target.checked ? '启用' : '禁用'}, 请重新连接以应用更改`, 'warn');
                } else {
                    log(`认证支持已${e.target.checked ? '启用' : '禁用'}`, 'info');
                }
            }
        });
        
        // 认证类型选择事件处理
        window.appDOM.authTypeSelect.addEventListener('change', (e) => {
            if (e && e.target && e.target.value) {
                updateAuthTypeSettingsVisibility(e.target.value);
            }
        });
        
        // 初始设置认证详情区域的可见性
        try {
            updateAuthDetailsVisibility(window.appDOM.authCheckbox.checked);
        } catch (error) {
            log(`初始化认证详情区域可见性失败: ${error.message}`, 'error');
        }
    } catch (error) {
        log(`设置认证处理时发生错误: ${error.message}`, 'error');
    }
}

/**
 * 根据认证复选框状态显示或隐藏认证详情区域
 * @param {boolean} isAuthEnabled - 认证是否启用
 */
export function updateAuthDetailsVisibility(isAuthEnabled) {
    if (window.appDOM.authDetailsDiv) {
        window.appDOM.authDetailsDiv.style.display = isAuthEnabled ? 'block' : 'none';
    }
}

/**
 * 根据选择的认证类型显示相应的设置区域
 * @param {string} authType - 认证类型
 */
export function updateAuthTypeSettingsVisibility(authType) {
    if (window.appDOM.oauth2SettingsDiv && window.appDOM.basicAuthSettingsDiv) {
        window.appDOM.oauth2SettingsDiv.style.display = authType === 'oauth2' ? 'block' : 'none';
        window.appDOM.basicAuthSettingsDiv.style.display = authType === 'basic' ? 'block' : 'none';
    }
}

/**
 * 设置客户端能力选择框
 */
export function setupClientCapabilityCheckboxes() {
    // 检查DOM元素是否存在
    if (!window.appDOM.capabilityCheckboxes || !Array.isArray(Array.from(window.appDOM.capabilityCheckboxes))) {
        log('能力选择框元素不存在，跳过客户端能力设置', 'info');
        return;
    }
    
    // 默认全选所有能力
    window.appDOM.capabilityCheckboxes.forEach(checkbox => {
        checkbox.checked = true;
    });
    
    log('默认启用所有客户端能力', 'debug');
}

/**
 * 设置能力选择框事件处理
 */
export function setupCapabilityHandlers() {
    // 检查DOM元素是否存在
    if (!window.appDOM.capabilityCheckboxes || !Array.isArray(Array.from(window.appDOM.capabilityCheckboxes))) {
        log('能力选择框元素不存在，跳过能力处理设置', 'info');
        return;
    }
    
    window.appDOM.capabilityCheckboxes.forEach(checkbox => {
        checkbox.addEventListener('change', (e) => {
            if (window.appState.connected) {
                // 如果已连接，提示用户需要重新连接才能使更改生效
                log(`能力变更: ${e.target.id.replace('capability-', '')} 已${e.target.checked ? '启用' : '禁用'}, 请重新连接以应用更改`, 'warn');
            } else {
                log(`能力变更: ${e.target.id.replace('capability-', '')} 已${e.target.checked ? '启用' : '禁用'}`, 'info');
            }
        });
    });
}

/**
 * 设置快速操作按钮事件处理
 */
export function setupQuickActionHandlers() {
    // 检查DOM元素是否存在
    if (!window.appDOM.clearLogBtn || !window.appDOM.logContainer) {
        log('快速操作相关UI元素不存在，跳过快速操作处理设置', 'info');
        return;
    }
    
    // 清除日志按钮
    window.appDOM.clearLogBtn.addEventListener('click', () => {
        window.appDOM.logContainer.innerHTML = '';
        log('日志已清除', 'info');
    });
}

/**
 * 更新UI状态
 * @param {boolean} isConnected - 是否已连接
 * @param {Object} serverCapabilities - 服务器能力（可选）
 */
export function updateUIState(isConnected, serverCapabilities = null) {
    // 检查必要的DOM元素是否存在
    const requiredElements = [
        'connectBtn', 'disconnectBtn', 'terminateBtn', 'sendRequestBtn', 
        'connectionStatusSpan', 'quickActionButtons'
    ];
    
    for (const element of requiredElements) {
        if (!window.appDOM[element]) {
            log(`${element} 元素不存在，跳过UI状态更新`, 'info');
            return;
        }
    }
    
    const { connectBtn, disconnectBtn, terminateBtn, sendRequestBtn, 
            connectionStatusSpan, quickActionButtons } = window.appDOM;
    
    // 更新连接状态
    window.appState.connected = isConnected;
    
    // 更新连接状态显示
    if (isConnected) {
        connectionStatusSpan.textContent = '已连接';
        connectionStatusSpan.className = 'status-connected';
    } else {
        connectionStatusSpan.textContent = '未连接';
        connectionStatusSpan.className = 'status-disconnected';
    }
    
    // 更新按钮状态
    connectBtn.disabled = isConnected;
    disconnectBtn.disabled = !isConnected;
    terminateBtn.disabled = !isConnected;
    sendRequestBtn.disabled = !isConnected;
    
    // 更新快速操作按钮状态
    if (Array.isArray(Array.from(quickActionButtons))) {
        quickActionButtons.forEach(button => {
            button.disabled = !isConnected;
        });
    }
    
    // 根据服务器能力禁用不支持的操作
    if (isConnected && serverCapabilities && typeof serverCapabilities === 'object') {
        // 这里可以根据服务器返回的能力信息来动态调整UI
        log(`根据服务器能力调整UI: ${JSON.stringify(serverCapabilities)}`, 'debug');
        
        // 示例：如果服务器不支持某个能力，可以禁用对应的UI元素
        // if (!serverCapabilities.someCapability) {
        //     someElement.disabled = true;
        // }
    }
}

/**
 * 禁用/启用能力选择框
 * @param {boolean} disable - 是否禁用
 */
export function disableCapabilityCheckboxes(disable) {
    // 检查DOM元素是否存在
    if (!window.appDOM.capabilityCheckboxes || !Array.isArray(Array.from(window.appDOM.capabilityCheckboxes))) {
        log('能力选择框元素不存在，跳过能力选择框禁用/启用操作', 'info');
        return;
    }
    
    window.appDOM.capabilityCheckboxes.forEach(checkbox => {
        checkbox.disabled = disable;
    });
    
    if (disable) {
        log('已禁用客户端能力选择', 'info');
    } else {
        log('已启用客户端能力选择', 'info');
    }
}

/**
 * 显示操作结果
 * @param {Object} result - 操作结果
 * @param {boolean} isError - 是否为错误
 */
export function displayResult(result, isError = false) {
    try {
        const resultString = typeof result === 'object' ? JSON.stringify(result, null, 2) : String(result);
        
        if (isError) {
            log(`操作失败: ${resultString}`, 'error');
        } else {
            log(`操作成功: ${resultString}`, 'success');
        }
        
    } catch (e) {
        log(`显示结果时出错: ${e.message}`, 'error');
    }
}